﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text.RegularExpressions;
using StockCrawlerLib.DAL;
using CrawlerCore;
using HtmlAgilityPack;

namespace StockCrawler.Other
{
    public partial class ImportStocks : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            //Để tạo file stocklist.txt thì làm như sau:
            //Mở fiddler
            //Trang http://cafef.vn/thi-truong-chung-khoan.chn
            //Tìm session dạng  e.cafef.vn/kby.ashx?_=1435076356098
            //Hoặc search tên 1 cty như "Công ty Cổ phần Nhựa và Môi trường xanh An Phát "
            string path = @"e:\PROGRAMMING\2015\crawler\docs\stocklist.txt";
            string content = File.ReadAllText(path);
            //string[] values = content.Split(new string[]{"},{"}, StringSplitOptions.None);
            //foreach(string value in values)
            //{

            //}
            ////{i:0,c:"AAA",m:"Công ty Cổ phần Nhựa và Môi trường xanh An Phát (An Phat., JSC)",o:"Cong ty Co phan Nhua va Moi truong xanh An Phat (An Phat., JSC)",san:2}
            //Regex r = new Regex("{i:[0-9]+,c:\"(?<c>(.*?))\",m:\"(?<m>(.*?))\",o:\"(?<o>(.*?))\",san:(?<san>[0-9])}");
            Regex r = new Regex("{i:[0-9]+,c:\"(?<c>(.*?))\",m:\"(?<m>(.*?))\",o:\"(?<o>(.*?))\",san:(?<san>[0-9])}");
            MatchCollection matchCollect = r.Matches(content);
            List<string> result = new List<string>();
            StockRepository obj = new StockRepository();
            foreach (Match m in matchCollect)
            {
                if (m.Success)
                {
                    string code = m.Result("${c}");
                    //string name = m.Result("${m}");
                    //string search = m.Result("${o}");
                    //string san = m.Result("${san}");
                    if (code.Length == 3)
                        obj.Insert(m.Result("${c}"),m.Result("${m}"), m.Result("${o}"),int.Parse(m.Result("${san}")));
                }
            }
        }

        protected void btnCreateUrl_Click(object sender, EventArgs e)
        {

        }

        protected void Button1_Click1(object sender, EventArgs e)
        {
            string code = "L14";
            string url = "http://vietstock.vn/Search.aspx?type=1&key=" + code;
            BrowserSession_General br = new BrowserSession_General();
            HtmlDocument doc =  br.Get(url, true);
            doc = br.Get(br.Response.ResponseUri.AbsoluteUri);

            if (br.Response.ResponseUri.AbsoluteUri.Contains(code))
            {
                string xpath = ".//table[@id ='MainContent_Company_General_StockEOD_Lite1_gvEODList']//tr";
                HtmlNodeCollection nodeCollection = doc.DocumentNode.SelectNodes(xpath);
                //Bỏ dòng header
                nodeCollection.Remove(0);
                foreach (HtmlNode node in nodeCollection)
                { 
                    HtmlNodeCollection tdCollection = node.SelectNodes(".//td");
                    string date = tdCollection[0].InnerText.Trim();
                    string price = tdCollection[1].InnerText.Trim();
                    //\r\n                            +300 ▲(1.01%)\r\n                        
                    //\r\n                            0 ■(0.00%)\r\n                        
                    string change = tdCollection[2].InnerText.Trim();
                    Regex r = new Regex(@"(?<value1>(\+|\-)\d+)\s.\((?<value2>.+)\)");
                    //Regex r = new Regex(@"(?<value1>(\+|\-)\d+)");
                    //Regex r = new Regex(@"(?<value1>d+)");
                    Match m = r.Match(change);
                    string value = m.Result("${value1}");
                    string percent = m.Result("${value2}");
                    string amount = tdCollection[3].InnerText;
                }
            }
        }

        /// <summary>
        /// //Full query: KLNY,KLCPDLH,GTC,T,S,TKLGD,TGTGD,VHTT,CN,TN,GYG,GD1,KLD1,GTD1,GD2,KLD2,GTD2,GD3,KLD3,GTD3,TGG,TGPTG,GDC,KLDC,BQM,BQB,DM,DB,LDM,LDB,LDMB,KLDM,KLDB,KLDMB,KLGDKL,GTGDKL,KLGDTT,GTGDTT,
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnTKGD_Click(object sender, EventArgs e)
        {
            BrowserSession_General br = new BrowserSession_General();

            string code = "L14";
            HtmlDocument doc = br.Get("http://vietstock.vn/", true);
            System.Net.CookieCollection cookieCollect = br.Response.Cookies;

            string url = "http://vietstock.vn/Search.aspx?type=1&key=" + code;
            doc = br.Get(url, true);
            //doc = br.Get(br.Response.ResponseUri.AbsoluteUri);
            cookieCollect = br.Response.Cookies;

            if (br.Response.ResponseUri.AbsoluteUri.Contains(code))
            {
                //url = string.Format("http://vietstock.vn/{0}/thong-ke-giao-dich.htm",code);
                //doc = br.Get(url, true);
                
                //http://finance.vietstock.vn/Controls/TradingResult/Matching_Hose_Result.aspx 
                url = "http://finance.vietstock.vn/Controls/TradingResult/Matching_Hnx_Result.aspx";
                string lcol = HttpUtility.UrlEncode("GTC,T,S,CN,TN,TGG,TGPTG,GDC,KLDC,DM,DB,LDM,LDB,KLDM,KLDB,KLGDKL,GTGDKL,KLGDTT,GTGDTT,");
                DateTime startDate = DateTime.Now.AddDays(-1);
                string fdate = HttpUtility.UrlEncode(startDate.ToString("MM/dd/yyyy"));
                string tdate = HttpUtility.UrlEncode(startDate.AddMonths(-1).Date.ToString("MM/dd/yyyy"));

                //scode=SD9&lcol=TKLGD%2CTGTGD%2CVHTT%2CBQ%2CTGG%2CTGPTG%2CBQM%2CBQB%2CKLGDKL%2CGTGDKL%2C&sort=Time&dir=desc&page=1&psize=10&fdate=01%2F11%2F15&tdate=02%2F11%2F15&exp=default&language=default
                br.PostParams = string.Format("scode={0}&lcol={1}&sort=Time&dir=desc&page=1&psize=100&fdate={2}&tdate={3}&exp=default&language=default", code, lcol, fdate, tdate);
                br.SaveCookiesFrom(cookieCollect);
                doc = br.Post(url);
                //MatchingHoseResult
                string xpath = ".//div[@id ='MatchingHnxResult']//tbody//tr";
                HtmlNodeCollection nodeCollection = doc.DocumentNode.SelectNodes(xpath);
                foreach (HtmlNode node in nodeCollection)
                {
                    HtmlNodeCollection tdCollection = node.SelectNodes(".//td");
                    //Giá tham chiếu
                    string GTC = tdCollection[0].InnerText.Trim();
                    //Trần
                    string T = tdCollection[1].InnerText.Trim();
                    //Sàn
                    string S = tdCollection[2].InnerText.Trim();
                    //Cao nhất
                    string CN = tdCollection[3].InnerText.Trim();
                    //Thấp nhật
                    string TN = tdCollection[4].InnerText.Trim();
                    //Tăng giảm giá
                    string TGG = tdCollection[5].InnerText.Trim();
                    //Tăng giảm phần trăm giá
                    string TGPTG = tdCollection[6].InnerText.Trim();
                    //Giá điều chỉnh
                    string GDC = tdCollection[7].InnerText.Trim();
                    //Khối lượng điều chỉnh
                    string KLDC = tdCollection[8].InnerText.Trim();
                    //Dư mua
                    string DM = tdCollection[9].InnerText.Trim();
                    //Dư bán
                    string DB = tdCollection[10].InnerText.Trim();
                    //Lệnh đặt mua
                    string LDM = tdCollection[11].InnerText.Trim();
                    //Lệnh đặt bán
                    string LDB = tdCollection[12].InnerText.Trim();
                    //Khối lượng đặt mua
                    string KLDM = tdCollection[13].InnerText.Trim();
                    //Khối lượng đặt bán
                    string KLDB = tdCollection[14].InnerText.Trim();
                    //Khối lượng giao dịch khớp lệnh
                    string KLGDKL = tdCollection[15].InnerText.Trim();
                    //Giá trị giao dịch khớp lệnh
                    string GTGDKL = tdCollection[16].InnerText.Trim();
                    //Khối lượng giao dịch thỏa thuận
                    string KLGDTT = tdCollection[17].InnerText.Trim();
                    //Giá trị giao dịch thỏa thuận
                    string GTGDTT = tdCollection[18].InnerText.Trim();

                }
            }
        }

        protected void btnTKGDCafeF_Click(object sender, EventArgs e)
        {
            //http://s.cafef.vn/Lich-su-giao-dich-L14-1.chn
             BrowserSession_General br = new BrowserSession_General();

            string code = "L14";

            string url = string.Format("http://s.cafef.vn/Lich-su-giao-dich-{0}-1.chn", code);
            HtmlDocument doc = br.Get(url);

            if (br.Response != null)
            {
                string xpath = "//div[@id='ctl00_ContentPlaceHolder1_ctl03_notHO']//table//tr[contains(@id,'ctl00_ContentPlaceHolder1_ctl03_rptData')]";
                HtmlNodeCollection nodeCollection = doc.DocumentNode.SelectNodes(xpath);
                foreach (HtmlNode node in nodeCollection)
                {
                    HtmlNodeCollection tdCollection = node.SelectNodes(".//td");
                    string date = tdCollection[0].InnerText.Trim();
                    string price = tdCollection[2].InnerText.Trim();
                   //"0.6 (2.0 %)"                    
                    string change = tdCollection[3].InnerText.Trim();
                    Regex r = new Regex(@"(?<value1>(\-|).+)\s\((?<value2>.+)\)");
                    //Regex r = new Regex(@"(?<value1>(\+|\-)\d+)");
                    //Regex r = new Regex(@"(?<value1>d+)");
                    Match m = r.Match(change);
                    string value = m.Result("${value1}");
                    string percent = m.Result("${value2}");
                    //Khối lượng khớp lệnh
                    string KLKL = tdCollection[5].InnerText.Trim();
                    //Giá trị khớp lệnh
                    string GTKL = tdCollection[6].InnerText.Trim();
                    //Khối lượng thỏa thuận
                    string KLTT = tdCollection[7].InnerText.Trim();
                    //Giá trị thỏa thuận
                    string GTTT = tdCollection[8].InnerText.Trim();
                    //Giá tham chiếu
                    string GTC = tdCollection[9].InnerText.Trim();
                    //Giá mở cửa
                    string GMC = tdCollection[10].InnerText.Trim();
                    //Giá cao nhất
                    string GCN = tdCollection[11].InnerText.Trim();
                    //Giá thấp nhất
                    string GTN = tdCollection[12].InnerText.Trim();
                }
            }
        }
    }
}